<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
        //练习题1
        function a()
        {

        }
        var a;
        console.log(typeof a);
        //变量声明优先于函数声明，但是变量赋值不会随着变量声明优先而随之优先
        //如果a存在被赋值，那么流程就是声明变量a==》声明函数a()==》最后给a赋值

        //练习题2
        if(!(b in window))
        {
            var b=1;
        }
        console.log(b);
        //!代表“非”逻辑运算，所以!(b in window)意味着b不在全局变量，所以b的值是undefined
        if(c in window)
        {
            var c=1;
        }
        console.log(c);
        //c in window意味着c在全局变量，所以c的值是1

        //练习题3
        var d=1;
        function d(d)
        {
            console.log(d);
        }
        d(2);
        //根据优先级原则，先声明最后再赋值。所以流程是先声明变量d==》声明函数d()==》最后给d赋值
        /*
        代码执行流程如下：
        var d;
        function d(d)
        {
            console.log(d)';'
        }
        d=1;
        d(2);
        到最后函数d()被覆盖，赋值为1，所以d(2)执行的时候就无法找到目标函数
        */
    </script>
</head>
<body>
    
</body>
</html>